// 3.无重复字符的最长子串

package LeetcodeHot100;

import java.util.HashMap;
import java.util.Map;

public class Solution003 {
    public int lengthOfLongestSubstring(String s) {
        if (s.length() == 0)
            return 0;
        Map<Character, Integer> hashmap = new HashMap<Character, Integer>();
        int max = 0; // 存储最长的子串长度
        int left = 0; // 当前子串的首个下标
        for(int i = 0; i < s.length(); i++) {
            // 如果当前遍历的字符在队列中出现，则更新子串的起始下标
            if(hashmap.containsKey(s.charAt(i))) 
                left = hashmap.get(s.charAt(i)) + 1;
            // 将新字符插入队列
            hashmap.put(s.charAt(i), i);
            // 计算当前子串的长度并与max比较
            max = Math.max(max,i - left + 1); // 注意这里不能写max(max,i - hashmap.get(s.charAt(i)))
        }
        return max;
    }
}
